package com.dhsc.util;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.dhsc.domain.yypt.common.DbfVo;
import com.linuxense.javadbf.DBFReader;

import lombok.extern.slf4j.Slf4j;

/**
 * @ClassName:  QsjkFilesUtil
 * @Description: 清算监控读取文件公共方法
 * @date:   2024年3月11日 上午10:36:52       
 * @author: clong
 * @Copyright:  东海运营
 */
@Slf4j
public class QsjkFilesUtil {

	//HH:mm:ss 格式 
	private static final String HHMMSS = "HH:mm:ss";
	
	private QsjkFilesUtil()
	{

	}
	
	/**
	 * @Title: readDbfFile   
	 * @Description: 读取DBF内容公共方法
	 * @author: clong
	 * @date:   2024年3月11日 上午10:38:02
	 */
	public static DbfVo readDbfFile(String path, String filename )
	{
		DbfVo dbf = new DbfVo();
        Object[] rowVales = null;
        List<Map<String, String>> rowList = new ArrayList<>();
        log.info("开始读取DBF文件，文件路径为: " + path);
        try (FileInputStream inputStream = new FileInputStream(path + "//" + filename);
        		DBFReader dbfReader = new DBFReader(inputStream, Charset.forName("GBK"), false);){
 
            // 字段数量
            int fieldCount = dbfReader.getFieldCount();
            log.info("读取DBF文件，字段数量为:" + fieldCount + "个！");
 
            // 记录数量
            int recordCount = dbfReader.getRecordCount();
            log.info("读取DBF文件，数据量为：" + recordCount + "个！");
 
 
            String[] fieldName = new String[fieldCount];
            for (int i = 0; i < fieldCount; i++) {
                fieldName[i] = dbfReader.getField(i).getName();
            }
            dbf.setFieldCount(fieldCount);
            dbf.setFieldName(fieldName);
            dbf.setRecordCount(recordCount);
 
            while ((rowVales = dbfReader.nextRecord()) != null) {
                Map<String, String> rowMap = new HashMap<>();
                for (int i = 0; i < rowVales.length; i++) {
                	rowMap.put(dbfReader.getField(i).getName(), String.valueOf(rowVales[i]).trim());
                }
                rowList.add(rowMap);
            }
            if (CommonUtil.isNotEmptyList(rowList)) {
            	dbf.setRowList(rowList);
            }
            return dbf;
        } catch (IOException e) {
        	log.error("公共方法读取DBF内容异常", e);  
        }
        return dbf;
	}
	
	/**
	 * @Title: readLogFile   
	 * @Description: 读取log文件公共方法
	 * @param path
	 * @param filename
	 * @return List<String>
	 * @author: clong
	 * @date:   2024年3月11日 下午1:09:12
	 */
	public static List<String> readLogFile(String path, String filename)
	{
		List<String> list = new ArrayList<>();
		try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(path + "/" + filename), "GBK"))) {
		    String line = "";
		    while ((line = br.readLine()) != null) {
		        list.add(line);
		    }
		} catch (IOException e) {
			log.error("公共方法读取log文件异常", e);  
		}
		return list;
	}
	
	/**
	 * @Title: getSubstring   
	 * @Description: 根据特定字符串截取
	 * @param str
	 * @param startStr
	 * @param endStr
	 * @return String
	 * @author: clong
	 * @date:   2024年3月11日 下午1:34:13
	 */
	public static String getSubstring(String str, String startStr, String endStr) {
	    int startIndex = str.indexOf(startStr) + startStr.length();
	    int endIndex = str.indexOf(endStr, startIndex);
	    return str.substring(startIndex, endIndex);
	}
	
	/**
	 * @Title: compareTime   
	 * @Description: 判断两个时间的大小
	 * @param time1
	 * @param time2
	 * @return
	 * @throws ParseException boolean
	 * @author: clong
	 * @date:   2024年3月11日 下午1:55:55
	 */
	public static boolean compareTime(String time1, String time2) throws ParseException{
		boolean result = false;
		SimpleDateFormat dateFormat = new SimpleDateFormat(HHMMSS);
		Date date1 = dateFormat.parse(time1);
		Date date2 = dateFormat.parse(time2);
		if(date1.after(date2))
		{
			result = true;
		}
		return result;
	}
	
	/**
	 * @Title: getSystemSfm   
	 * @Description: 获取系统时间时分秒
	 * @author: clong
	 * @date:   2024年3月12日 下午3:39:55
	 */
	public static String getSystemSfm(){
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern(HHMMSS);
		
		LocalTime currentTime = LocalTime.now();
		return currentTime.format(formatter);
	}
	
	/**
	 * @Title: getTimeTd   
	 * @Description: 根据开始时间、结束时间、间隔，获取执行次数
	 * @param start_time
	 * @param end_time
	 * @return int
	 * @author: clong
	 * @date:   2024年3月12日 下午3:55:04
	 */
	public static int getTimeTd(String startTime, String endTime, int zxjg)
	{
		LocalTime time1 = LocalTime.parse(startTime);
        LocalTime time2 = LocalTime.parse(endTime);
 
        long minutesBetween = ChronoUnit.MINUTES.between(time1, time2);
        long diffInMinutes = Math.abs(minutesBetween)/zxjg;
 
        return (int) (diffInMinutes + 1);
	}
	
	/**
	 * @Title: getTimeAddTd   
	 * @Description: 时分秒增加分钟后的时间
	 * @param start_time
	 * @param addMinutes
	 * @return String
	 * @author: clong
	 * @date:   2024年3月12日 下午4:52:07
	 */
	public static String getTimeAddTd(String startTime, int addMinutes)
	{
		LocalTime time = LocalTime.parse(startTime); // 设置时分秒
        LocalTime newTime = time.plusMinutes(addMinutes); // 加上30分钟
        
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(HHMMSS);
        // 使用format方法和formatter将LocalTime转换为String
        return newTime.format(formatter);
	}
	
}
